﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Security.Permissions;
using System.Collections;
using System.Linq;

using System.Data;
using System.Data.Common;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using uacars;

namespace CADLibraryClass
{
    public class EmpleadosCAD
    {
        private string cadenaConexion;

        public EmpleadosCAD()
        {
            cadenaConexion = Singleton.Instancia.Cadena;
        }


        //IMPLEMENTACION DE LAS FUNCIONES DE ACCESO A DATOS
        public bool AltaEmpleado(int id, string dni, string nombre, string apellido1, string apellido2, string telefono, string email, string direccion, string poblacion, string provincia, string codigoPostal, string cargo, string sueldo, DateTime fechAlta, string login, string password)
        {
            bool estadoOperacion = false;

            try
            {
                DataSet bdvirtual = new DataSet();

                SqlDataAdapter da = new SqlDataAdapter("select * from empleados", cadenaConexion);
                da.Fill(bdvirtual, "empleados");

                DataTable dt = new DataTable();
                dt = bdvirtual.Tables["empleados"];

                DataRow nuevaFila = dt.NewRow();
                nuevaFila[0] = id;
                nuevaFila[1] = dni;
                nuevaFila[2] = nombre;
                nuevaFila[3] = apellido1;
                nuevaFila[4] = apellido2;
                nuevaFila[5] = telefono;
                nuevaFila[6] = email;
                nuevaFila[7] = direccion;
                nuevaFila[8] = poblacion;
                nuevaFila[9] = provincia;
                nuevaFila[10] = codigoPostal;
                nuevaFila[11] = cargo;
                nuevaFila[12] = sueldo;
                nuevaFila[13] = fechAlta;
                nuevaFila[14] = login;
                nuevaFila[15] = password;

                dt.Rows.Add(nuevaFila);

                SqlCommandBuilder cBuilder = new SqlCommandBuilder(da);

                da.Update(bdvirtual, "empleados");

                dt.AcceptChanges();
            }


            catch (SqlException sqlex)
            {
                throw new Exception("Error insertando empleado en uacarsBD: " + id, sqlex);
            }

            catch (Exception ex)
            {
                throw ex;
            }
            estadoOperacion = true;

            return (estadoOperacion);
        }



        public DataTable BuscarEmpleados()
        {
            DataSet bdvirtual = new DataSet();

            SqlDataAdapter da = new SqlDataAdapter("select * from empleados", cadenaConexion);
            //SqlDataAdapter da = new SqlDataAdapter("select id,nif,nombre,apellido1,apellido2,telefono, email, direccion, localidad, provincia, cp, cargo, sueldo, fechaalta from empleados", cadenaConexion);

            da.Fill(bdvirtual, "empleados");

            DataTable dt = new DataTable();
            dt = bdvirtual.Tables["empleados"];

            return (dt);

        }

        public DataTable BuscarEmpleados2()
        {
            DataSet bdvirtual = new DataSet();

            //SqlDataAdapter da = new SqlDataAdapter("select * from empleados", cadenaConexion);
            SqlDataAdapter da = new SqlDataAdapter("select id,nif,nombre,apellido1,apellido2,telefono, email, direccion, localidad, provincia, cp, cargo, sueldo, fechaalta from empleados", cadenaConexion);

            da.Fill(bdvirtual, "empleados");

            DataTable dt = new DataTable();
            dt = bdvirtual.Tables["empleados"];

            return (dt);

        }


        public DataTable BuscarEmpleados(int id, string dni, string nombre, string apellido1, string apellido2, string telefono, string email, string direccion, string poblacion, string provincia, string codigoPostal, string cargo, string sueldo, DateTime fechAlta, string login, string password)
        {
            string filtro = "";

            if (dni != "") filtro += "nif = " + dni;
            if (nombre != "") { if (filtro != "") filtro += " AND "; filtro += "nombre LIKE '" + nombre+"'"; }
            if (apellido1 != "") { if (filtro != "") filtro += " AND "; filtro += "apellido1 LIKE '" + apellido1+"'"; }
            if (apellido2 != "") { if (filtro != "") filtro += " AND "; filtro += "apellido2 LIKE '" + apellido2+"'"; }
            if (telefono != "") { if (filtro != "") filtro += " AND "; filtro += "telefono = " + telefono; }
            if (email != "") { if (filtro != "") filtro += " AND "; filtro += "email LIKE '" + email+"'"; }
            if (direccion != "" && direccion!=null) { if (filtro != "") filtro += " AND "; filtro += "direccion LIKE '" + direccion+"'"; }
            if (poblacion != "") { if (filtro != "") filtro += " AND "; filtro += "localidad LIKE '" + poblacion+"'"; }
            if (provincia != "") { if (filtro != "") filtro += " AND "; filtro += "provincia LIKE '" + provincia + "'"; }
            if (codigoPostal != "") { if (filtro != "") filtro += " AND "; filtro += "cp = " + codigoPostal; }
            if (cargo != "") { if (filtro != "") filtro += " AND "; filtro += "cargo LIKE '" + cargo + "'"; }
            if (sueldo != "") { if (filtro != "") filtro += " AND "; filtro += "sueldo = " + sueldo; }
            if (fechAlta != DateTime.Parse("01/01/1900")) { if (filtro != "") filtro += " AND "; filtro += "fechaalta = '" + fechAlta.Date+"'"; }
            if (login != "") { if (filtro != "") filtro += " AND "; filtro += "login LIKE '" + login+"'"; }
            if (password != "") { if (filtro != "") filtro += " AND "; filtro += "password LIKE '" + password+"'"; }


            string nombreTabla = "empleados";
            DataSet ds = new DataSet();
            ds.Tables.Add(nombreTabla);
            SqlConnection conn = new SqlConnection(cadenaConexion);
            SqlDataAdapter da = new SqlDataAdapter();
            SqlCommand co = new SqlCommand("", conn);
            if (filtro == "")
                co.CommandText = "select * from " + nombreTabla;
            else
                co.CommandText = "select * from " + nombreTabla + " WHERE " + filtro;
            da.SelectCommand = co;
            da.Fill(ds, nombreTabla);

            return ds.Tables[nombreTabla];
        }


        public bool ModificarEmpleado(int id, string dni, string nombre, string apellido1, string apellido2, string telefono, string email, string direccion, string poblacion, string provincia, string codigoPostal, string cargo, string sueldo, DateTime fechAlta, string login, string password)
        {
            bool estadoOperacion;
            try
            {
                DataSet bdvirtual = new DataSet();

                SqlDataAdapter da = new SqlDataAdapter("select * from empleados", cadenaConexion);
                da.Fill(bdvirtual, "empleados");

                DataTable dt = new DataTable();
                dt = bdvirtual.Tables["empleados"];


                DataRow fila = dt.Select("id='" + id + "'")[0];
                fila["id"] = id;
                fila["nif"] = dni;
                fila["nombre"] = nombre;
                fila["apellido1"] = apellido1;
                fila["apellido2"] = apellido2;
                fila["telefono"] = telefono;
                fila["email"] = email;
                fila["direccion"] = direccion;
                fila["localidad"] = poblacion;
                fila["provincia"] = provincia;
                fila["cp"] = codigoPostal;
                fila["cargo"] = cargo;
                fila["sueldo"] = sueldo;
                fila["fechaalta"] = fechAlta;
                if(login!="")
                fila["login"] = login;
                if(password!="")
                fila["password"] = password;


                bdvirtual.Tables["empleados"].LoadDataRow(fila.ItemArray, true);
                SqlCommandBuilder cBuilder = new SqlCommandBuilder(da);

                da.Update(bdvirtual, "empleados");

                dt.AcceptChanges();
            }


            catch (SqlException sqlex)
            {
                throw new Exception("Error modificando empleado en uacarsBD: " + id, sqlex);
            }

            catch (Exception ex)
            {
                throw ex;
            }
            estadoOperacion = true;

            return (estadoOperacion);
        }



        public bool BorrarEmpleado(int id)
        {
            try
            {
                DataSet bdvirtual = new DataSet();

                SqlDataAdapter da = new SqlDataAdapter("select * from empleados", cadenaConexion);
                da.Fill(bdvirtual, "empleados");

                DataTable dt = new DataTable();
                dt = bdvirtual.Tables["empleados"];

                DataRow[] filaBorrar;
                filaBorrar = dt.Select("id = " + id);
                filaBorrar[0].Delete();

                SqlCommandBuilder cBuilder = new SqlCommandBuilder(da);

                da.Update(bdvirtual, "empleados");

                dt.AcceptChanges();

            }

            catch (SqlException sqlex)
            {
                throw new Exception("Error borrando empleado en uacarsBD: " + id, sqlex);
            }

            catch (Exception ex)
            {
                throw ex;
            }
            return true;
        }


    }
}